package com.tang.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * EnableConfigurationProperties 注解。
 * 该注解是用来开启对StarterServiceProperties步骤中 @ConfigurationProperties 注解配置Bean的支持。
 * 也就是@EnableConfigurationProperties注解告诉Spring Boot 能支持@ConfigurationProperties。
 * 当然了，也可以在 @ConfigurationProperties 注解的类上添加 @Configuration 或者  @Component 注解
 * 
 * ConditionalOnProperty 注解控制 @Configuration 是否生效。
 * 简单来说也就是我们可以通过在yml配置文件中控制 @Configuration 注解的配置类是否生效。
 */
@Configuration
@ConditionalOnClass(StarterService.class)
@EnableConfigurationProperties(StarterServiceProperties.class)
public class StarterAutoConfigure {
    
    @Autowired
    private StarterServiceProperties properties;
    
    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnProperty(prefix = "tang.door", value = "enabled", havingValue = "true")
    public StarterService starterService() {
        return new StarterService(properties.getUserStr());
    }
    
}
